home *** CD-ROM | disk | FTP | other *** search
/ Univers Mac Interactif 42 / Univers Mac Interactif - Issue 42.iso / Internet / MacHTTP 2.0 / MacHTTP Software & Docs / Tutorials / Extending MacHTTP Scripts / Email-Eudora.txt next >
Text File  |  1994-12-16  |  7KB  |  146 lines

  1. -- set these properties outside of the event.  That way they will only be set 
  2. -- once each time the app is run, not once for each event.
  3. property crlf : (ASCII character 13) & (ASCII character 10)
  4. -- This is a standard header for HTML files.
  5. property http_10_header : "HTTP/1.0 200 OK" & crlf & "Server: MacHTTP" & crlf & ¬
  6.     "MIME-Version: 1.0" & crlf & "Content-type: text/html" & crlf & crlf
  7. -- Idletime is how long you want it to remain open to 
  8. -- wait for another event. Idletime is in seconds.
  9. -- Datestamp will contain the current date.  Initialize it here.
  10. property idletime : 300 -- set to 5 minutes
  11. property datestamp : 0
  12.  
  13. -- this bit of code outside the sdoc event is executed at launch-time
  14. -- it is neccesary because an idle event can happen between
  15. -- launch and the receipt of an sdoc event (and in fact often does)
  16. set datestamp to current date
  17.  
  18. -- This is the loop for AppleEvents received by the application.
  19. -- When you check the syntax, AppleScript will ask you to locate 
  20. -- MacHTTP and will set the correct name at that time.
  21. on «event WWWΩsdoc» path_args ¬
  22.     given «class kfor»:http_search_args, «class post»:post_args, «class meth»:method, «class addr»:client_address, «class user»:username, «class pass»:password, «class frmu»:from_user, «class svnm»:server_name, «class svpt»:server_port, «class scnm»:script_name, «class ctyp»:content_type
  23.     -- Variables available for use:
  24.     -- http_search_args - stuff in the URL after a ?
  25.     -- post_args - stuff in the URL after a $
  26.     -- method - GET, POST, etc. Used to tell if post_args are valid
  27.     -- client_address - IP address or domain name of remote client's host
  28.     -- from_user - non-standard. e-mail address of remote user
  29.     -- username - authenticated user name
  30.     -- password - authenticated password
  31.     -- server_name - name or IP address of this server
  32.     -- server_port - TCP/IP port number being used by this server
  33.     -- script_name - URL name of this script
  34.     -- content_type - MIME content type of post_args
  35.     
  36.     -- Using the "try" clause causes the "on error" routine to be run
  37.     -- if an error occurs instead of crashing.
  38.     -- If the error occurs outside the "try"/"end try" space then
  39.     -- the "on error" routine is NOT run.
  40.     try
  41.         -- save the current date and time to check later for quitting
  42.         set datestamp to current date
  43.         
  44.         -- Parse the post_args data into variables for processing
  45.         -- this script only handles the post_args.  Handling the other 
  46.         -- variables is trivial compared to this.
  47.         set return_page to http_10_header ¬
  48.             & ¬
  49.             "<HTML><HEAD><TITLE>Email Form Results</TITLE></HEAD>" & "<BODY><H1>Email Form Results</H1>" & return
  50.         
  51.         -- this will produce a list of "name=value" pairs 
  52.         set postarglist to tokenize post_args with delimiters {"&"}
  53.         
  54.         -- process each list pair in postarglist
  55.         -- store the original AppleScript text item delimiters
  56.         set oldDelim to AppleScript's text item delimiters
  57.         -- use "=" to delimit the pairs
  58.         set AppleScript's text item delimiters to {"="}
  59.         -- traverse the list and process the items
  60.         repeat with currpostarg in postarglist
  61.             set currname to first text item of currpostarg
  62.             if currname = "name" then
  63.                 set username to (Decode URL (dePlus (last text item of currpostarg)))
  64.             else if currname = "address" then
  65.                 set from_address to (Decode URL (dePlus (last text item of currpostarg)))
  66.             else if currname = "subject" then
  67.                 set email_subject to (Decode URL (dePlus (last text item of currpostarg)))
  68.             else if currname = "message" then
  69.                 set email_body to (Decode URL (dePlus (last text item of currpostarg)))
  70.             else if currname = "S" then
  71.                 -- ignore it.  That's the Submit button.
  72.             else
  73.                 -- you have a variable who's name you don't know.  Bad news!
  74.                 -- create your own errMsg and errNum to pass back
  75.                 -- the number 100 has no significance.  I just chose it at random
  76.                 error ("Unknown field in post_args: " & currname) number 100
  77.             end if
  78.         end repeat
  79.         -- restore the old AppleScript text item delimiters settings
  80.         set AppleScript's text item delimiters to oldDelim
  81.         
  82.         -- NOTE: Set the "to_address" to be the address to which you want all of the mail sent.
  83.         set to_address to "jonwd@tjp.washington.edu"
  84.         set return_page to return_page ¬
  85.             & "E-mail has been sent to " & to_address & return ¬
  86.             & "<P><I>Message generated at: " & (current date) ¬
  87.             & "</I>" & "</BODY></HTML>"
  88.         set email_host to "homer.u.washington.edu"
  89.         
  90.         -- create new message in Eudora 1.4.3 (any later version will work as well)
  91.         -- to compile this, you have to do "Check Syntax" and locate Eudora.
  92.          -- Don't forget to configure Eudora correctly!!
  93.          tell application "Eudora1.4.3"
  94.             set newmessage to (make message InsertHere end of mailbox "Out" of mail folder "")
  95.             set field "To" of newmessage to to_address
  96.             set field "From" of newmessage to from_address
  97.             set field "Subject" of newmessage to email_subject
  98.             set field "" of newmessage to "From: " & username & return & return & email_body
  99.             queue newmessage QueueType 0
  100.         end tell
  101.         -- return the page created.  A return statement ends the 
  102.         -- processing of the AppleEvent
  103.         return return_page
  104.         
  105.         -- here is the routine to run if an error occurs
  106.         -- errMsg contains the message sent by the System
  107.         -- errNum contains the number of the error (negative for System, AE, or AS errors)
  108.     on error errMsg number errNum
  109.         -- create a page of HTML text to return
  110.         set return_page to http_10_header ¬
  111.             & ¬
  112.             "<HTML><HEAD><TITLE>Error Page</TITLE></HEAD>" & "<BODY><H1>Error Encountered!</H1>" & return ¬
  113.             & "An error was encountered while trying to run this script." & return
  114.         set return_page to return_page ¬
  115.             & "<H3>Error Message</H3>" & return & errMsg & return ¬
  116.             & "<H3>Error Number</H3>" & return & errNum & return ¬
  117.             & "<H3>Date</H3>" & return & (current date) & return
  118.         set return_page to return_page ¬
  119.             & ¬
  120.             "<HR>Please notify Jon Wiederspan at " & ¬
  121.             "<A HREF=\"mailto:jonwd@tjp.washington.edu\">jonwd@tjp.washington.edu</A>" & " of this error." & "</BODY></HTML>"
  122.         -- return the page created.  A return statement ends the 
  123.         -- processing of the AppleEvent
  124.         return return_page
  125.     end try
  126. end «event WWWΩsdoc»
  127.  
  128. -- The idle function is run everytime the system sends an idle message.
  129. -- If the current date is more than idletime seconds more than the last date 
  130. -- then it is time to quit.
  131. -- The return value tells the system how long to wait before
  132. on idle
  133.     if (current date) > (datestamp + idletime) then
  134.         quit
  135.     end if
  136.     return 5
  137. end idle
  138.  
  139. -- This code allows you to do any clean-up that might be necessary.
  140. -- Example: you could write the quit event time to a log to see 
  141. -- how often the applet is running.
  142. on quit
  143.     -- do any clean-up chores here
  144.     continue quit
  145. end quit
  146.